#ifndef AUTO_DOWNLOAD_EN_H
#define AUTO_DOWNLOAD_EN_H
#ifdef __cplusplus
extern "C"
{
#endif
    /*
        Chinese is encoded in Unicode. If it is garbled, please change the encoding method of the editor.
        自动下载库 By启凡科创 适用于STC8、STC15平台MCU

        注意：单片机的P3.0在开启此功能后，检测下载状态时，将保持高电平输出，如对硬件系统有影响，切勿使用此功能。

        如果需要在开启功能的状态下使用功能，使用download_delay_set()接口将触发延时设置为3或以上，自己根据实际情况更改。
        使用方法：
            如果不需是使用串口，直接在程序循环中扫描download_chek_loop()接口即可
            有两种扫描方式：
                1：放置于mian主函数的死循环里进行扫描（缺点：程序阻塞时无法检测自动下载，优点：占用cpu低）
                2：放置于定时器ms级中断内扫描（缺点：占用CPU相对较高，优点：任何情况下（芯片跑飞除外）均能正常自动下载

        version:v1.0.2  2023-1-12
    */

#include "LIB_CONFIG.h"

#ifndef DOWNLOAD_EN
#define DOWNLOAD_EN 1 // 如果配置文件未定义，则用户自定义，0禁用模块不不编译，1启用模块
#endif

#if DOWNLOAD_EN

// 判定下载延时初始值，1-50
#define download_delay_default 1

#define sys_wake_up_from_isp 0x40
#define sys_reset_val 0x20

    /**
     * @brief 启用模块后直接放入程序循环即可
     */
    void download_chek_loop();

    /**
     * @brief 禁用自动下载，需使用P3.0进行操作时，务必调用此接口暂时屏蔽自动下载检测
     */
    void download_disable();

    /**
     * @brief 使能自动下载，P3.0使用结束时，调用此接口恢复自动下载检测
     */
    void download_enable();

    /**
     * @brief 设置判定下载延时初始值，
     *        如上位机给mcu发送数据时，可进行适当加大时间防止把下发数据误判为下载程序
     *
     * @param val 1-255，默认为宏定义download_delay_default值
     */
    void download_delay_set(uint8_t val);

    /**
     * @brief 手动系统软件复位重启
     */
    void sys_restart();

#endif
#ifdef __cplusplus
}
#endif
#endif
